#ifndef DICC_TRIE
#define DICC_TRIE

template<typename T>
class DiccTrie{
public:
    DiccTrie();
    ~DiccTrie();
    void definir(const String& clave, T* significado);
    bool definido(const String& clave) const;
    T& obtener(const String& clave) const;
    void borrar(const String& clave);
private:
    struct Nodo
    {
        Nodo() : nodos(255), significado(NULL)
        {
            //Definicion del vector vacio
            for(int i=0; i < 255; i++){
                nodos.Definir(i,NULL);
            }
        };

        ~Nodo(){
            if(significado != NULL){
                delete significado;
            }
        }

        T* significado;
        Arreglo<Nodo*> nodos;
    };
    Nodo* raiz;

    unsigned int toInt(const char c) const;
    void borrarTodos(Nodo*);
    Nodo* obtenerNodo(const String& clave) const;
};

#include "DiccTrie.cpp"

#endif // DICC_TRIE
